package club.janna.hello.parser.constants;

/**
 * IEC104规约-常量
 * Created by guopanbo on 17/12/26.
 */
public class IEC104Statute {
    /**
     * 报文头
     */
    public static final int HEAD = 0x68;
    /**
     * 连接确认（激活确认）
     */
    public static final int CON_ACK = 0x0b;
    /**
     * 总召
     */
    public static final int TYPE_SUMMON_OVERALL = 0x64;
    /**
     * 浮点型遥测数据，带品质描述，不带时标，每位遥测值占5个字节
     */
    public static final int TYPE_TELEMETRY_FLOAT_DATA = 0x0d;

    /**
     * 传送原因-激活确认
     */
    public static final int REASON_CONFIRM_ACTIVATING = 0x07;
    /**
     * 传送原因-激活结束
     */
    public static final int REASON_END_ACTIVATION = 0x0a;

    /**
     * 传送原因-突发
     */
    public static final int REASON_OUTBREAK = 0x03;

    /**
     * 传送原因-循环/周期
     */
    public static final int REASON_CYCLE = 0x01;

    /**
     * 起始帧（建立链接时激活）
     * @param ns 发送序号
     * @param nr 接收序号
     * @return
     */
    public static byte[] starting(int ns, int nr) {
        return new byte[]{0x68, 0x04, 0x07, 0x00, 0x00, 0x00};
    }

    /**
     * 测试应答数据
     * @param ns 发送序号
     * @param nr 接收序号
     * @return
     */
    public static byte[] testAckData(int ns, int nr) {
        return new byte[]{0x68, 0x04, (byte)0x83, 0x00, 0x00, 0x00};
    }

    /**
     * 总召唤
     * @param ns 发送序号
     * @param nr 接收序号
     * @return
     */
    public static byte[] summonOverall(int ns, int nr) {
        return new byte[]{0x68, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14};
    }

    /**
     * 确认应答数据
     * @param ns 发送序号
     * @param nr 接收序号
     * @return
     */
    public static byte[] confirmAckData(int ns, int nr) {
        return new byte[]{0x68, 0x04, 0x01, 0x00, 0x02, 0x00};
    }
}
